valorAbsoluto :: Float -> Float
valorAbsoluto a = if a > 0 then a else -a

bisiesto :: Int -> Bool
bisiesto x = x `mod` 4 == 0

factorial :: Integer -> Integer
factorial 0 = 1
factorial n = n * factorial (n - 1)

esDivisiblePorAlgunoMenor :: Int -> Int -> Bool
esDivisiblePorAlgunoMenor a 1 = False
esDivisiblePorAlgunoMenor a b = (a `mod` b == 0) || esDivisiblePorAlgunoMenor a (b-1)

esPrimo :: Int -> Bool
esPrimo 1 = False
esPrimo 2 = True
esPrimo n = not (esDivisiblePorAlgunoMenor n (n-1))

cantDivisoresPrimos :: Int -> Int
cantDivisoresPrimos 1 = 0
cantDivisoresPrimos 2 = 1
cantDivisoresPrimos n = cantDivisoresPrimosAux n n

cantDivisoresPrimosAux :: Int -> Int -> Int
cantDivisoresPrimosAux n 1 = 0
cantDivisoresPrimosAux n 2 = 1
cantDivisoresPrimosAux n rec = if esPrimo rec && esDivPor n rec then 1 + cantDivisoresPrimosAux n (rec-1) else cantDivisoresPrimosAux n (rec-1) 
    where esDivPor d n = (d `mod` n == 0)
    
    


